bitkeeper revision 1.15.1.5 (3e280e17xqZ75-O3H14dqvzIc20XAQ)
authorkaf24@labyrinth.cl.cam.ac.uk <kaf24@labyrinth.cl.cam.ac.uk>
Fri, 17 Jan 2003 14:07:19 +0000 (14:07 +0000)
committerkaf24@labyrinth.cl.cam.ac.uk <kaf24@labyrinth.cl.cam.ac.uk>
Fri, 17 Jan 2003 14:07:19 +0000 (14:07 +0000)
dev.c:
  Fix receive queue boundedness

xen-2.4.16/net/dev.c

index 5c4d999bf32a84559390bf4ad638b4e19b9c7184..449879a1a3755ffac1ff47cf21876819cb1dea16 100644 (file)
@@ -690,6 +690,7 @@ int netif_rx(struct sk_buff *skb)
        int this_cpu = smp_processor_id();
        struct softnet_data *queue;
        unsigned long flags;
+        net_vif_t *vif;
 
        if (skb->stamp.tv_sec == 0)
                get_fast_time(&skb->stamp);
@@ -703,13 +704,13 @@ int netif_rx(struct sk_buff *skb)
         
        netdev_rx_stat[this_cpu].total++;
 
-        if (skb->src_vif == VIF_UNKNOWN_INTERFACE)
+        if ( skb->src_vif == VIF_UNKNOWN_INTERFACE )
             skb->src_vif = VIF_PHYSICAL_INTERFACE;
 
-        if (skb->dst_vif == VIF_UNKNOWN_INTERFACE)
+        if ( skb->dst_vif == VIF_UNKNOWN_INTERFACE )
             net_get_target_vif(skb);
         
-        if (sys_vif_list[skb->dst_vif] == NULL)
+        if ( (vif = sys_vif_list[skb->dst_vif]) == NULL )
         {
             // the target vif does not exist.
             goto drop;
@@ -730,8 +731,9 @@ int netif_rx(struct sk_buff *skb)
             read_lock(&tasklist_lock);
             p = &idle0_task;
             do {
-                if ( p->domain != sys_vif_list[skb->dst_vif]->domain ) continue;
-                skb_queue_tail(&sys_vif_list[skb->dst_vif]->skb_list, skb);
+                if ( p->domain != vif->domain ) continue;
+                if ( vif->skb_list.qlen > 100 ) break;
+                skb_queue_tail(&vif->skb_list, skb);
                 cpu_mask = mark_hyp_event(p, _HYP_EVENT_NET_RX);
                 read_unlock(&tasklist_lock);
                 goto found;